[アップデート] Amazon Lightsail でコンテナが利用可能になりました!
本日のアップデートで Amazon Lightsail でコンテナが利用できるようになりました。
純粋にコンテナだけを使う
AWS でコンテナを利用する場合、Amazon EC2、Amazon ECS(EC2/AWS Fargate)、Amazon EKS のいずれかを利用されていたかと思いますが、これらに加えて Amazon Lightsail が選択肢として追加されました。
AWS Fargate の登場でコンテナホストの管理から解放されるなど、随分とシンプルにコンテナ環境を利用できるようになりましたが、それでもまだ IAM ロールやログといったインフラ部分の管理を行う必要があります。
Amazon Lightsail はデベロッパーがウェブサイトやウェブアプリケーションをクラウドにデプロイし、管理するのに必要なコンピューティング性能、ストレージ容量、ネットワーキング機能が提供されている仮想プライベートサーバー(VPS)のサービスです。Lightsail コンテナサービスでユーザーが用意するのはコンテナイメージのみです。その他の IAM、ログ、ロードバランサーなどを管理する必要はありません。
スモールな環境でサクッとコンテナを使いたい、インフラのことは考えずに使いたい、そういった方にはオススメになりそうですね!
ロードバランサーもついてるぜ
Lightsail では Lightsail ロードバランサーが提供されていますが、コンテナサービスをオリジンに指定することは出来ません。というのも、コンテナサービスは以下の図のようにデフォルトでロードバランサーが含まれています。
(引用元:Container services in Amazon Lightsail)
ロードバランサーも含みで $7/月
から利用できると考えると、なかなか良い選択肢になりそうな気がしますね。
注意点
コンテナサービスを利用する際の注意点の一例です。
- コンテナサービスあたり最大 10 個のコンテナを指定可能。ただし、パブリックエンドポイントに紐づくコンテナは 1 つのみ
- 月あたり 500GB のデータ転送量が料金に含まれています
- データの IN/OUT でカウントされます
- 500 GB 超過分は、コンテナサービスからインターネットまたは別のリージョン、または同じリージョン内の AWS リソースへのデータ転送 OUT に対して課金されます
- コンテナサービスは無効化していても課金されます
- 使用できるコンテナレジストリはパブリックコンテナレジストリのみ
- ローカルマシンから Lightsail にプッシュすることで非公開にカスタムコンテナイメージを利用することも出来ます
- プライベートなコンテナイメージの利用方法は別途、記事にいたしましたのであわあせてお読みください
- Lightsail ロードバランサーのオリジンにコンテナサービスを指定することはできません。ただし、コンテナサービスにはロードバランサーが含まれています。
- Lightsail CDN ディストリビューションのオリジンにコンテナサービスを指定することはできません。よって CDN が必要な場合は CloudFront を利用します。
やってみる
コンテナイメージの準備
コンテナイメージは以下の公式ブログを参考に lightsail-hello-world
をローカル環境に準備しました。
$ docker images lightsail-hello-world REPOSITORY TAG IMAGE ID CREATED SIZE lightsail-hello-world latest 6ed154fce985 2 minutes ago 899MB
現在 Lightsail がサポートしているコンテナレジストリは Docker-Hub などのパブリックコンテナレジストリのみです。先日、AWS でもパブリックコンテナレジストリを提供するとの発表がありましたが、現時点で Amazon ECR はパブリックコンテナレジストリとして利用できませんので今回は Docker-Hub に push します。(marumo1981
の部分は各自のアカウント名に置き換えてください)
$ docker tag lightsail-hello-world marumo1981/lightsail-hello-world $ docker login $ docker push marumo1981/lightsail-hello-world
なおコンテナレジストリを利用せず、Lightsail コンテナサービスに直接 push することも可能です。
コンテナサービスを作成
Lightsail の管理コンソールを開きます。コンテナ
タブが追加されていますね。コンテナサービスの作成
をクリックします。
リージョンおよびコンテナサービスの容量を選択します。とりあえず試してみる場合は最初の3ヶ月間無料枠で利用可能な Micro
を選ぶのが良いでしょう。
デプロイの作成で カスタムデプロイを指定
を選択します。任意のコンテナ名を入力、イメージには先程 push したコンテナイメージを指定します。起動コマンドや環境変数も指定することができますが、今回はスキップします。ポートおよびプロトコルを指定します。
パブリックエンドポイントは HTTPS
のみをサポートしますので、プロトコルで HTTP
を指定しても HTTPS
にリダイレクトされます。またデフォルトドメインの証明書は自動的に設定、管理されますのでユーザーによる管理は不要です。
パブリックエンドポイントとなるコンテナとして今回は hello-world
を指定します。
サービス名を指定し コンテナサービスを作成
をクリックします。サービス名はデフォルトドメインの先頭部分に含まれます。
しばらくすると、デプロイメントがアクティブになります。
作成されたパブリックエンドポイントにアクセスしてみます。
$ curl https://hello-world.hqu75XXXXXXXX.ap-northeast-1.cs.amazonlightsail.com/ {"message": "Hello Flask API World!"}
正常に動作していますね。めっちゃ簡単にコンテナアプリケーションをリリースできることがおわかりいただけたでしょうか!
ログを開く
からコンテナログを確認することができます。表示期間の指定や、フィルターも可能です。
新しいバージョンのデプロイ
次に新しいコンテナバージョンのデプロイを確認してみます。表示されるメッセージを Hello Classmethod API World!
に変更したものを v2
として Docker-Hub に push しておきます。
$ docker push marumo1981/lightsail-hello-world:v2
Lightsail の管理コンソールにもどり デプロイの変更
からイメージの指定を新しいコンテナイメージに変更し 保存とデプロイ
をクリックします。これだけです。
しばらくすると新しいデプロイバージョンが有効になり、以前のバージョンは無効になっていることがわかります。
パブリックエンドポイントにアクセスしてみましょう。
$ curl https://hello-world.hqu75XXXXXXXX.ap-northeast-1.cs.amazonlightsail.com/ {"message": "Hello Classmethod API World!"}
新しいコンテナイメージで動作していますね!
スケールアウトも簡単
冒頭でご紹介したとおりコンテナサービスはロードバランサーが含まれています。パブリックエンドポイントを dig
で確認してみると、複数のターゲット IP が表示されることからもわかります。3つの IP が表示されているので 3 AZ で動作していそうですね。
$ dig hello-world.hqu75XXXXXXXX.ap-northeast-1.cs.amazonlightsail.com +short 18.177.207.254 3.115.199.136 54.178.181.151
ロードバランサーはユーザーが管理する必要はありませんので、このように容量を変更するだけで簡単にスケールアウトすることも出来ます。
ホストの IP アドレスが表示されるようにコンテナイメージを変更しデプロイしました。この状態で複数回リクエストを送ってみます。
$ curl https://hello-world.hqu75XXXXXXXX.ap-northeast-1.cs.amazonlightsail.com/ "172.26.13.85" $ curl https://hello-world.hqu75XXXXXXXX.ap-northeast-1.cs.amazonlightsail.com/ "172.26.18.212" $ curl https://hello-world.hqu75XXXXXXXX.ap-northeast-1.cs.amazonlightsail.com/ "172.26.33.153"
3つのホストで稼働していることがわかりますね!
モニタリングは心もとないかも
提供されているメトリクスは CPU 使用率およびメモリ使用率だけです。またアラームの設定はできません。このあたりのモニタリングは心もとないかもしれませんね。
さいごに
とりあえずコンテナ環境をサクッと作って、ウェブサービス、アプリケーションをはじめたい場合に非常にお手軽で良いですね。Dockerfile があれば、ものの数分で公開できます。
モニタリングやCI/CDなどの課題が出てきたら、ECS などをその他のコンテナサービスを検討するとして、それまでは Lightsail コンテナサービスでとりあえずはじめてみる、ってものアリかと思います。
まだプライベートコンテナレジストリからの pull に対応していない(非公開で利用したい場合は aws cli で lightsail に push)など、使いにくい部分もありますが今後のアップデートに期待したいサービスですね!
以上!大阪オフィスの丸毛(@marumo1981)でした!